// 简化的ChatService实现，专注于解决SSE通信问题
class ChatService {
  constructor() {
    this.activeRequests = new Map();
    console.log('ChatService已初始化');
  }

  // 生成唯一的memoryId
  generateMemoryId() {
    return 'chat_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
  }

  // 发送消息并处理SSE响应 - 使用最简单直接的方式
  sendMessage(memoryId, message, onMessage, onError) {
    // 记录开始发送消息
    console.log('🔄 开始发送消息到后端');
    console.log('📝 MemoryId:', memoryId);
    console.log('💬 消息内容:', message);
    
    // 确保参数有效
    if (!memoryId || !message) {
      const error = new Error('memoryId和message不能为空');
      console.error('❌ 参数错误:', error.message);
      onError(error);
      return () => {};
    }

    // 如果已有请求，先取消
    if (this.activeRequests.has(memoryId)) {
      console.log('⚠️  取消现有请求');
      this.cancelRequest(memoryId);
    }

    // 创建新的XMLHttpRequest对象
    const xhr = new XMLHttpRequest();
    // 使用相对路径，通过Vite代理发送请求，已确认可以成功连接
      const url = '/api/ai/chat';
    
    // 存储请求对象
    this.activeRequests.set(memoryId, { xhr, completed: false });
    
    try {
      // 配置请求
      xhr.open('POST', url, true);
      xhr.setRequestHeader('Content-Type', 'application/json');
      xhr.setRequestHeader('Accept', 'text/event-stream');
      xhr.withCredentials = true; // 允许跨域携带凭证
      
      // 简单的缓冲区，用于存储接收到的数据
      let buffer = '';
      
      // 进度事件处理 - 关键部分，用于处理流式响应
      xhr.onprogress = function() {
        // 获取完整的响应文本
        const responseText = xhr.responseText;
        
        // 只处理新增的数据
        const newText = responseText.substring(buffer.length);
        if (newText) {
          console.log('📥 接收到新数据:', newText);
          
          // 处理SSE格式：按行分割
          const lines = newText.split('\n');
          
          for (const line of lines) {
            if (line.startsWith('data:')) {
              // 提取data:后面的内容
              const data = line.substring(5).trim();
              if (data) {
                console.log('✅ 处理数据:', data);
                onMessage(data); // 直接调用回调函数，传递数据
              }
            }
          }
          
          // 更新缓冲区
          buffer = responseText;
        }
      };
      
      // 加载完成事件
      xhr.onload = function() {
        console.log('✅ 请求完成，状态码:', xhr.status);
        // 标记请求为已完成
        const requestInfo = this.activeRequests.get(memoryId);
        if (requestInfo) {
          requestInfo.completed = true;
        }
      }.bind(this);
      
      // 错误处理
      xhr.onerror = function() {
        console.error('❌ 请求发生错误');
        onError(new Error('网络请求失败，请检查后端服务是否正常运行'));
        this.cancelRequest(memoryId);
      }.bind(this);
      
      // 超时处理
      xhr.ontimeout = function() {
        console.error('⏰ 请求超时');
        onError(new Error('请求超时，后端响应时间过长'));
        this.cancelRequest(memoryId);
      }.bind(this);
      
      // 设置超时时间
      xhr.timeout = 60000; // 60秒
      
      // 准备请求体 - 使用字符串键名确保格式正确
      const requestBody = JSON.stringify({
        "memoryId": "1", // 使用固定值，与后端示例一致
        "message": message
      });
      
      console.log('📤 发送请求体:', requestBody);
      // 发送请求
      xhr.send(requestBody);
      
    } catch (error) {
      console.error('❌ 发送请求时发生异常:', error);
      onError(error);
      this.cancelRequest(memoryId);
    }
    
    // 返回取消函数
    return () => {
      this.cancelRequest(memoryId);
    };
  }

  // 取消指定的请求
  cancelRequest(memoryId) {
    console.log('🚫 取消请求:', memoryId);
    const requestInfo = this.activeRequests.get(memoryId);
    if (requestInfo && requestInfo.xhr) {
      requestInfo.xhr.abort();
      this.activeRequests.delete(memoryId);
    }
  }

  // 关闭所有连接
  closeAllConnections() {
    console.log('🚪 关闭所有连接');
    for (const memoryId of this.activeRequests.keys()) {
      this.cancelRequest(memoryId);
    }
  }
}

export default new ChatService();